package im.engure.consumer;

import im.engure.common.proxy.ServiceProxyFactory;
import im.engure.common.registery.LocalHostsRegistry;
import im.engure.common.registery.LocalServiceRegistry;
import im.engure.common.registery.URL;
import im.engure.common.service.QuotesService;
import im.engure.provider.serviceimpl.QuotesServiceImpl;

public class Consumer {
    public static void main(String[] args) {

        LocalServiceRegistry.registerService("im.engure.common.service.QuotesService",
                QuotesServiceImpl.class);
        LocalHostsRegistry.registerHost("im.engure.common.service.QuotesService",
                new URL("127.0.0.1", 8888));

        //远程调用
        /*
        String result = HttpClient.sendHttpRequest("127.0.0.1", 8888,
                new Invocation("im.engure.common.service.QuotesService",
                        "getAQuoteByCelebrity", new Class<?>[]{String.class}, new Object[]{"Napoleon"}));
        */

        //jdk动态代理（由代理对象为我们进行远程调用）
        QuotesService quotesService = ServiceProxyFactory.getProxy(QuotesService.class);
        String result = quotesService.getAQuoteByCelebrity("Napoleon");

        System.out.println("接收的结果为【" + result + "】");

    }
}

// DUBBO浅尝
// =========================
// 1.DONE 在一个项目中实现 common、provider、consumer 三个模块
// 2.DONE 使用Http请求进行远程调用
// 3.DONE 使用代理对象进行远程调用
// 4.DONE netty请求处理
// 5.DONE 抽取 ”协议接口“，实现协议配置化
// 6.DONE 负载均衡
// 7.DONE 容错机制（根据自定义的【容错异常】来进行容错：重试、超时时间等等）
// 8.DONE 简单Mock
